#include <stdio.h>

// 值传参，操作的是参数的拷贝，不会改变原来变量
void swap1(int a, int b) {
	int t = a; a = b; b = t;
}

// 操作的是指针的拷贝，但仍指向原变量地址，所以修改的对应地址内容能修改原变量
void swap2(int *a, int *b) {
	int t = *a; *a = *b; *b = t;
}

// 在C++中，函数参数的传递方式有引用传递；引用传递指在调用函数时将实际参数的地址传递到函数中；
// 则在函数内对参数所进行的修改，会作用到参数本体
void swap3(int &a, int &b) {
	int t; t = a; a = b; b = t;
}

int main(void)
{
	int x = 1, y = 5;
	printf("原值 x:%d y:%d\n", x, y);
	swap1(x,y);
	printf("swap1之后 x:%d y:%d\n", x, y);	// 变量没有变化
	swap2(&x,&y);
	printf("swap2之后 x:%d y:%d\n", x, y);	// 变量值交换
	swap3(x,y);
	printf("swap3之后 x:%d y:%d\n", x, y);  // 交换回去 
	return 0;
}
